package modele.mode;

import modele.Joueur;
import modele.Plateau;
import modele.mode.ex.ModeInexistant;

/**
 * Représente le mode de jeu qui régit la partie
 *
 * @author zianechm
 */
public abstract class Mode {

	public Mode() {
	}

	/**
	 *
	 * @param mode le nom du mode
	 * @return le mode représenté par 'mode'
	 * @throws ModeInexistant
	 */
	public static Mode getModeNom(String mode) throws ModeInexistant {
		if (mode.equals("A Mort")) {
			return new ModeAMort();
		} else if (mode.equals("Drapeau")) {
			return new ModeDrapeau();
		} else {
			throw new ModeInexistant();
		}
	}

	/**
	 * Actualise le plateau 'plateau'
	 *
	 * @param plateau
	 */
	public abstract void mettreAJour(Plateau plateau);

	/**
	 *
	 * @param plateau le plateau courant
	 * @param joueur1 le joueur 1
	 * @param joueur2 le joueur2
	 * @return le Joueur gagnant, null sinon
	 */
	public Joueur getJoueurGagnant(Plateau plateau, Joueur joueur1, Joueur joueur2) {
		if (joueur1.getPions().isEmpty()) {
			return joueur2;
		} else if (joueur2.getPions().isEmpty()) {
			return joueur1;
		} else {
			return null;
		}
	}
}
